package JAVA101_1118;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * Created by xiebang
 * Description
 * User:小谢
 * Date:2021-11-18
 * Time:17:22
 */

public class java101_JDBC {
    public static void main(String[] args) throws SQLException {
        //1.创建DataSourese 对象 生命周期应该是要跟随整个程序
        DataSource dataSource = new MysqlDataSource();
        //接下来需要针对dataSourse 进行一些配置.以便后面能够顺利的访问到数据库服务器
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java101_1118?characterEncoding=utf-8&useSSL=true");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("xcb@19980521");

        //2.数据库建立链接,建立连接好了之后就可以进行后续的数据传输了
        //建立连接的意义就是为了验证当前的网络通信是否正常
        //如果不正常就会抛出sqlexception异常
        //connection对象的生命周期是比较短的,每一个请求创建一个新的connec.
        Connection connection = dataSource.getConnection();

        //3.拼装sql语句,用到preparestatement对象
        //以插入为例
        //当前示例中插入的数据都是写死的,其实也可以让程序在运行是获取到
        //动态拼接上去
        int id = 1;
        String name = "曹操";
        int classId = 10;
       // String sql = "insert into student values(1,"曹操",10)";
        String sql = "insert into student values(?,?,?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);
        statement.setInt(3,classId);
        System.out.println("statement :" +statement);
        //拼接完成后可以执行SQLl
        //insert delete update都使用executeUpdate 方法来执行
        //select 就使用executeQuery来执行
        int ret = statement.executeUpdate();
        System.out.println("ret: " + ret);

        //执行完毕之后,关闭释放相关资源
        //一定是最后创建的被先释放
        statement.close();
        connection.close();
        //jdbc的代码看起来很麻烦但是代码都是固定的,核心就是根据不同的场景拼装不同的SQL
    }
}
